import api from './api';

const livekitService = {
    /**
     * 从后端获取加入直播房间所需的Token
     * @param {string} roomName - 要加入的房间名
     * @param {string} participantName - 加入者的身份标识（用户名）
     * @param {string} role - 加入者的角色 ('publisher' 或 'subscriber')
     * @returns {Promise<string>} - 解析为JWT Token字符串的Promise
     */
    async getJoinToken(roomName, participantName, role) {
        try {
            console.log(`[LiveKitService] 正在为房间'${roomName}', 参与者'${participantName}', 角色'${role}'获取Token...`);
            const response = await api.post('/api/live/join-token', { roomName, participantName, role });

            if (response.data && response.data.data && response.data.data.token) {
                console.log('[LiveKitService] 成功获取Token');
                return response.data.data.token;
            } else {
                throw new Error(response.data.message || '获取Token时返回了无效的数据格式');
            }
        } catch (error) {
            console.error(`[LiveKitService] 获取Token失败:`, error);
            const errorMessage = error.response?.data?.message || error.message || `获取Token失败`;
            throw new Error(errorMessage);
        }
    },

    /**
     * 通知后端开始录制
     * @param {string} roomName - 要录制的房间名
     * @returns {Promise<object>} - 包含 egressId 的对象
     */
    async startRecording(roomName) {
        try {
            console.log(`[LiveKitService] 请求开始录制房间: ${roomName}`);
            const response = await api.post('/api/live/recording/start', { roomName });
            if (response.data && response.data.data && response.data.data.egressId) {
                console.log('[LiveKitService] 成功启动录制, Egress ID:', response.data.data.egressId);
                return response.data.data;
            } else {
                throw new Error(response.data.message || '启动录制失败');
            }
        } catch (error) {
            console.error(`[LiveKitService] 启动录制失败:`, error);
            const errorMessage = error.response?.data?.message || error.message || '启动录制请求失败';
            throw new Error(errorMessage);
        }
    },

    /**
     * 通知后端停止录制
     * @param {string} egressId - 正在进行的 Egress ID
     * @returns {Promise<object>}
     */
    async stopRecording(egressId) {
        try {
            console.log(`[LiveKitService] 请求停止录制, Egress ID: ${egressId}`);
            const response = await api.post('/api/live/recording/stop', { egressId });
            console.log('[LiveKitService] 成功停止录制');
            return response.data;
        } catch (error) {
            console.error(`[LiveKitService] 停止录制失败:`, error);
            const errorMessage = error.response?.data?.message || error.message || '停止录制请求失败';
            throw new Error(errorMessage);
        }
    },

    /**
     * 获取指定房间的录制文件列表
     * @param {string} roomName - 房间名
     * @returns {Promise<Array>} - 录制文件信息数组
     */
    async getRecordings(roomName) {
        try {
            console.log(`[LiveKitService] 获取房间 ${roomName} 的录制列表`);
            // 这是一个模拟实现。您需要实现真实的后端接口。
            // const response = await api.get('/api/live/recordings', { params: { roomName } });
            // return response.data.data;

            // 为演示目的返回模拟数据：
            console.warn('[LiveKitService] 正在使用模拟录像数据。');
            if (roomName === 'teacher-lounge') {
                return [
                    { egressId: 'EG_xxxx_01', roomName: 'teacher-lounge', createdAt: Date.now() - 2 * 60 * 60 * 1000, duration: 3540, size: 520093696 },
                    { egressId: 'EG_xxxx_02', roomName: 'teacher-lounge', createdAt: Date.now() - 28 * 60 * 60 * 1000, duration: 1810, size: 250435584 }
                ];
            }
            return [];
        } catch (error) {
            console.error(`[LiveKitService] 获取录制列表失败:`, error);
            const errorMessage = error.response?.data?.message || error.message || `获取录制列表失败`;
            throw new Error(errorMessage);
        }
    }
};

export default livekitService;